package com.hospital.register.user.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hospital.register.dto.user.UserAuthDto;
import com.hospital.register.dto.user.UserQueryDto;
import com.hospital.register.dto.user.VerificationCodeDto;
import com.hospital.register.model.user.UserInfo;
import com.hospital.register.vo.user.LoginCodeVo;
import com.hospital.register.vo.user.UserQueryVo;

/**
 * 处理用户相关业务
 *
 * @author 刘逸晖
 */
public interface UserInfoService {

    /**
     * 新增手机用户
     *
     * @param phone 手机号
     * @return 新增的用户
     */
    UserInfo insertPhoneUser(String phone);

    /**
     * 验证码登录
     *
     * @param param 手机号、验证码……
     * @return token、名称……
     */
    LoginCodeVo loginWithVerificationCode(VerificationCodeDto param);

    /**
     * 实名认证
     *
     * @param authInfo 认证信息
     * @return 是否认证成功
     */
    boolean tryAuthentication(UserAuthDto authInfo);

    /**
     * 根据 id 查用户
     *
     * @param id id
     * @return 用户信息
     */
    UserQueryVo selectById(Long id);

    /**
     * 根据条件分页查询用户
     *
     * @param page       页码和每页长度
     * @param conditions 条件
     * @return 结果页
     */
    Page<UserQueryVo> selectPage(Page<UserQueryVo> page, UserQueryDto conditions);

    /**
     * 更新用户状态
     *
     * @param id     用户 id
     * @param status 新状态
     * @return 是否更新成功
     */
    boolean updateStatus(Long id, Byte status);

    /**
     * 根据 id 更新用户的认证状态
     *
     * @param id            用户 id
     * @param oldAuthStatus 旧的认证状态
     * @param newAuthStatus 新的认证状态
     * @return 是否更新成功
     */
    boolean updateAuthStatus(Long id, Byte oldAuthStatus, Byte newAuthStatus);

}
